package leetcode.code091;

public class Solution3 extends Solution091 {

	@Override
	public int numDecodings(String s) {
		int len = s.length();
		char[] chars = s.toCharArray();
//		int p1 = 1;// p2前一位可能数量
//		int p2 = 1;// p3前一位可能数量
//		int p3 = 1;// 达到当前位置，可能数量
		int[] ans = new int[3];
		ans[0] = chars[0] == '0' ? 0 : 1;// i%3; (i-1)%3 ; (i-2)%3
		if (len == 1 || chars[0] == '0')
			return ans[0];
		if (chars[1] == '0') {
			if (chars[0] > '2')
				return 0;
			ans[1] = 1;
		} else {
			if (chars[0] == '1' && chars[1] >= '1' && chars[1] <= '9')
				ans[1] = 2;
			else if (chars[0] == '2' && chars[1] >= '1' && chars[1] <= '6')
				ans[1] = 2;
			else
				ans[1] = 1;
		}
		for (int i = 2; i < len; i++) {
			if (chars[i] == '0') {// 当前结尾时0
				if (chars[i - 1] > '2' || chars[i - 1] == '0')
					return 0;
//				p3 = p1;
				ans[i % 3] = ans[(i - 2) % 3];
			} else if (chars[i - 1] == '1' && chars[i] >= '1' && chars[i] <= '9') {// 当前结尾1-9
//				p3 = p2 + p1;
				ans[i % 3] = ans[(i - 1) % 3] + ans[(i - 2) % 3];
			} else if (chars[i - 1] == '2' && chars[i] >= '1' && chars[i] <= '6') {// 当前结尾1-6
//				p3 = p2 + p1;
				ans[i % 3] = ans[(i - 1) % 3] + ans[(i - 2) % 3];
			} else {
//				p3 = p2;
				ans[i % 3] = ans[(i - 1) % 3];
			}
//			p1 = p2;
//			p2 = p3;
		}
		return ans[(len - 1) % 3];
	}

	public static void main(String[] args) {
		Solution3 so = new Solution3();
		so.debug1();
		so.debug2();
		so.debug3();
		so.debug4();
		so.debug5();
//		for (int i = 0; i < 10; i++) {
//			System.out.println((i + "").charAt(0));
//		}
		System.out.println(0 % 3);
	}

}
